{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![qiskit_header.png](images/qiskit_header.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Qiskit Tutorials\n",
    "\n",
    "Welcome Qiskitters.\n",
    "\n",
    "\n",
    "These tutorials aim to explain how to use Qiskit. We assume you have installed Qiskit; if not, please look at [qiskit.org](http://www.qiskit.org) or the install [documentation](https://qiskit.org/documentation/install.html). \n",
    "\n",
    "The focus of these notebooks is not on learning quantum computing.  Instead we will focus on how to use Qiskit, and will go into details only when needed. For those interested in learning about quantum computing we recommend the [Qiskit Textbook](https://qiskit.org/textbook) that we and the community have put together, or the [Qiskit documentation](https://qiskit.org/documentation).\n",
    "\n",
    "\n",
    "## Circuits\n",
    "\n",
    "This section gives you the tools to make your first circuits, execute them, and view the data.\n",
    "\n",
    "1. [Circuit basics](tutorials/circuits/01_circuit_basics.ipynb) - How to use the Qiskit quantum circuit.\n",
    "\n",
    "\n",
    "2. [Plotting data in Qiskit](tutorials/circuits/2_plotting_data_in_qiskit.ipynb) -  Illustrates the different ways of plotting data in Qiskit.\n",
    "\n",
    "\n",
    "3. [Summary of quantum operations](tutorials/circuits/3_summary_of_quantum_operations.ipynb) - List of quantum operations (gates, reset, measurements) in Qiskit Terra\n",
    "  \n",
    "        \n",
    "## Advanced Circuits\n",
    "\n",
    "1. [Advanced circuits](tutorials/circuits_advanced/01_advanced_circuits.ipynb) - Circuit building tools added including registerless declarations, composite gate updates and parameterized circuits.\n",
    "\n",
    "\n",
    "2. [Operators overview](tutorials/circuits_advanced/02_operators_overview.ipynb) - Gives a summary of the features and uses of the Operator class.\n",
    "\n",
    "\n",
    "3. [Advanced circuit visualization](tutorials/circuits_advanced/03_advanced_circuit_visualization.ipynb) - Details on drawing your quantum circuits.\n",
    "\n",
    "\n",
    "4. [Transpiler passes and passmanager](tutorials/circuits_advanced/04_transpiler_passes_and_passmanager.ipynb) - How to use the transpiler passes, passmanger, and extend the transpiler with a new pass.\n",
    "\n",
    "\n",
    "## Pulse\n",
    "\n",
    "1. [Building pulse schedules](tutorials/circuits_advanced/06_building_pulse_schedules.ipynb) - Building schedules of pulses.\n",
    "\n",
    "\n",
    "2. [Pulse Scheduler](tutorials/circuits_advanced/07_pulse_scheduler.ipynb) - Scheduling pulse.\n",
    "\n",
    "\n",
    "3. [Getting system information](tutorials/circuits_advanced/08_gathering_system_information.ipynb) - Obtaining system information.\n",
    "\n",
    "\n",
    "4. [Pulse simulation](tutorials/circuits_advanced/09_pulse_simulator_duffing_model.ipynb) - Simulate a Duffing oscillator using the pulse simulator.\n",
    "\n",
    "\n",
    "##  High-Performance Simulators\n",
    "\n",
    "To really speed up development of quantum computers, we need better simulators with the ability to model realistic noise processes that occur during computation on actual devices. Qiskit provides a high-performance simulator framework called `Aer` for studying quantum computing algorithms and applications in the noisy intermediate-scale quantum regime. \n",
    "\n",
    "1. [Simulators](tutorials/simulators/1_aer_provider.ipynb) - Gives a summary of the Qiskit Aer provider containing the Qasm, statevector, and unitary simulator.\n",
    "\n",
    "\n",
    "2. [Device noise simulation](tutorials/simulators/2_device_noise_simulation.ipynb) - Shows how to use the Qiskit Aer noise module to automatically generate a basic noise model for simulating hardware backends.\n",
    "\n",
    "\n",
    "3. [Building noise models](tutorials/simulators/3_building_noise_models.ipynb) - Shows how to use Qiskit Aer noise module to construct custom noise models for noisy simulations\n",
    "\n",
    "\n",
    "4. [Custom gate noise](tutorials/simulators/4_custom_gate_noise.ipynb) - Shows to implement simulations using custom noisy gates.\n",
    "\n",
    "\n",
    "5. [Noise transformations](tutorials/simulators/5_noise_transformation.ipynb) - Noise approximation utility functions to construct approximate Clifford noise models out of a general noise model\n",
    "\n",
    "\n",
    "6. [Extended stabilizer tutorial](tutorials/simulators/6_extended_stabilizer_tutorial.ipynb) - Gives an overview of the *extended stabilizer* Qasm Simulator method\n",
    "\n",
    "\n",
    "7. [Matrix Product State simulator](tutorials/simulators/7_matrix_product_state_method.ipynb) - Gives an overview of the *matrix product state* Simulator method\n",
    "\n",
    "\n",
    "##  Quantum Device Noise Analysis\n",
    "\n",
    "This includes better characterization of errors, improving gates, and computing in the presence of noise. Qiskit `ignis` is meant for those who want to design quantum error correction codes, or who wish to study ways to characterize errors through methods such as tomography and randomized benchmarking, or even to find a better way for using gates by exploring dynamical decoupling and optimal control.\n",
    "\n",
    "1. [Hamiltonian and gate characterizations](tutorials/noise/1_hamiltonian_and_gate_characterization.ipynb) - Sequences to measure ZZ rates between qubits and to measure rotation and angle errors in the gates.\n",
    "\n",
    "\n",
    "2. [Relaxation and decoherence](tutorials/noise/2_relaxation_and_decoherence.ipynb) - How to measure coherence times on the real quantum hardware\n",
    "\n",
    "\n",
    "3. [Measurement error mitigation](tutorials/noise/3_measurement_error_mitigation.ipynb) - How to peform calibration experiments for measurement errors and fed those calibrations into a \"filter\" that can be utilized to mitigate errors in subsequent experiments.\n",
    "\n",
    "\n",
    "4. [Randomized benchmarking](tutorials/noise/4_randomized_benchmarking.ipynb) - Randomized benchmarking (RB) is a technique used to measure the average gate error by measuring the outcomes of random Clifford circuits. This is used internally to report gate errors on our systems. \n",
    "\n",
    "\n",
    "5. [Quantum volume](tutorials/noise/5_quantum_volume.ipynb) - How to run quantum volume measurements on the quantum hardware.\n",
    "\n",
    "\n",
    "6. [Repetition Code](tutorials/noise/6_repetition_code.ipynb) - How to run a simple error correction code, known as the repetition code. This can be used to characterize bit flip errors in the hardware.\n",
    "\n",
    "\n",
    "7. [Accreditation](tutorials/noise/7_accreditation.ipynb) - protocol devised to characterize the reliability of noisy quantum devices."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-08-09T15:31:26.743124Z",
     "start_time": "2019-08-09T15:31:26.732618Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style='width: 100%; background-color:#d5d9e0;padding-left: 10px; padding-bottom: 10px; padding-right: 10px; padding-top: 5px'><h3>This code is a part of Qiskit</h3><p>&copy; Copyright IBM 2017, 2021.</p><p>This code is licensed under the Apache License, Version 2.0. You may<br>obtain a copy of this license in the LICENSE.txt file in the root directory<br> of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.<p>Any modifications or derivative works of this code must retain this<br>copyright notice, and modified files need to carry a notice indicating<br>that they have been altered from the originals.</p></div>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import qiskit.tools.jupyter\n",
    "%qiskit_copyright"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
